package org.ix.gateway.route.service;

import org.ix.common.models.PageList;
import org.ix.gateway.route.model.request.GatewayRouteAddRequest;
import org.ix.gateway.route.model.request.GatewayRoutePatchRequest;
import org.ix.gateway.route.model.request.GatewayRouteQueryRequest;
import org.ix.gateway.route.model.request.GatewayRouteSaveRequest;
import org.ix.gateway.route.model.response.GatewayRouteDetailResponse;
import org.ix.gateway.route.model.response.GatewayRouteListItemResponse;

import java.util.Collection;
import java.util.List;

/**
 * 网关路由业务逻辑
 *
 * @author 郗世豪（rarexixi@sina.com）
 */
public interface GatewayRouteService {

    /**
     * 添加网关路由
     *
     * @param addRequest 网关路由
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@sina.com）
     */
    GatewayRouteDetailResponse add(GatewayRouteAddRequest addRequest);

    /**
     * 批量添加网关路由
     *
     * @param list 网关路由列表
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@sina.com）
     */
    int batchAdd(Collection<GatewayRouteAddRequest> list);

    /**
     * 删除网关路由
     *
     * @param patchRequest 更新条件请求
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@sina.com）
     */
    int delete(GatewayRoutePatchRequest patchRequest);

    /**
     * 禁用网关路由
     *
     * @param patchRequest 更新条件请求
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@sina.com）
     */
    int disable(GatewayRoutePatchRequest patchRequest);

    /**
     * 启用网关路由
     *
     * @param patchRequest 更新条件请求
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@sina.com）
     */
    int enable(GatewayRoutePatchRequest patchRequest);

    /**
     * 根据路由id更新网关路由
     *
     * @param saveRequest 保存网关路由请求实体
     * @param id 路由id
     * @return 更新后的网关路由详情
     * @author 郗世豪（rarexixi@sina.com）
     */
    GatewayRouteDetailResponse updateById(GatewayRouteSaveRequest saveRequest, String id);

    /**
     * 根据路由id获取网关路由详情
     *
     * @param id 路由id
     * @return 网关路由详情
     * @author 郗世豪（rarexixi@sina.com）
     */
    GatewayRouteDetailResponse getById(String id);

    /**
     * 获取网关路由列表
     *
     * @param queryRequest 搜索条件
     * @return 符合条件的网关路由列表
     */
    List<GatewayRouteListItemResponse> getList(GatewayRouteQueryRequest queryRequest);

    /**
     * 分页获取网关路由列表
     *
     * @param queryRequest 搜索条件
     * @param pageNum      页码
     * @param pageSize     分页大小
     * @return 符合条件的网关路由分页列表
     */
    PageList<GatewayRouteListItemResponse> getPageList(GatewayRouteQueryRequest queryRequest, Integer pageNum, Integer pageSize);
}
